package br.com.cubedesk.repositorio;

import br.com.cubedesk.entidades.Equipamentos;
import br.com.cubedesk.hibernate.NewHibernateUtil;
import br.com.cubedesk.interfaces.InterfaceEquipamento;
import java.sql.SQLException;
import java.util.LinkedList;
import java.util.List;
import java.util.logging.Level;
import java.util.logging.Logger;
import javax.swing.JOptionPane;
import org.hibernate.Session;

public class RepositorioEquipamento implements InterfaceEquipamento {

    @Override
    public void salvarEquipamento(String marcaEquipamento, String modeloEquipamento,
            Integer statusEquipamento) {

        Session session = NewHibernateUtil.getSessionFactory().openSession();
        session.beginTransaction();
        Equipamentos equip = new Equipamentos(marcaEquipamento, modeloEquipamento,
                statusEquipamento, null);
        session.save(equip);
        session.getTransaction().commit();
        JOptionPane.showMessageDialog(null, "Equipamento adicionado com sucesso.");
        session.close();

    }

    @Override
    public void alterarEquipamento(Integer idEquipamento, String marcaEquipamento,
            String modeloEquipamento, Integer statusEquipamento) {

        Session session = NewHibernateUtil.getSessionFactory().openSession();
        session.beginTransaction();
        String query = "From Equipamentos";
        List<Equipamentos> list = (List<Equipamentos>) session.createQuery(query).list();
        for (Equipamentos equip : list) {
            if (equip.getIdEquipamento() == idEquipamento) {
                equip.setMarcaEquipamento(marcaEquipamento);
                equip.setModeloEquipamento(modeloEquipamento);
                equip.setStatusEquipamento(statusEquipamento);
                session.update(equip);
                session.getTransaction().commit();
                session.close();
            }
        }
        JOptionPane.showMessageDialog(null, "Equipamento alterado com sucesso.");

    }

    @Override
    public LinkedList<Equipamentos> pegarTodosEquipamentos() {
        Session session = NewHibernateUtil.getSessionFactory().openSession();
        session.beginTransaction();
        LinkedList<Equipamentos> list = new LinkedList<>();
        List<Equipamentos> hh = (List<Equipamentos>) session.createQuery("From Equipamentos").list();
        for (Equipamentos equip : hh) {
            list.add(equip);
        }
        session.flush();
        try {
            session.connection().commit();
        } catch (SQLException ex) {
            Logger.getLogger(RepositorioCliente.class.getName()).log(Level.SEVERE, null, ex);
        }
        session.close();
        return list;
    }

    @Override
    public LinkedList<Equipamentos> pegarEquipamentosPorId(Integer idEquipamento) {
        Session session = NewHibernateUtil.getSessionFactory().openSession();
        session.beginTransaction();
        LinkedList<Equipamentos> list = new LinkedList<>();
        List<Equipamentos> hh = (List<Equipamentos>) session.createQuery("From Equipamentos").list();
        for (Equipamentos equip : hh) {
            if (equip.getIdEquipamento()== idEquipamento) {
                list.add(equip);
            }
        }
        session.flush();
        try {
            session.connection().commit();
        } catch (SQLException ex) {
            Logger.getLogger(RepositorioCliente.class.getName()).log(Level.SEVERE, null, ex);
        }
        session.close();
        return list;
    }

    @Override
    public LinkedList<Equipamentos> pegarEquipamentosPorNome(String modeloEquipamento) {
        Session session = NewHibernateUtil.getSessionFactory().openSession();
        session.beginTransaction();
        LinkedList<Equipamentos> list = new LinkedList<>();
        List<Equipamentos> hh = (List<Equipamentos>) session.createQuery("From Equipamentos").list();
        for (Equipamentos equip : hh) {
            if (equip.getModeloEquipamento().contains(modeloEquipamento)) {
                list.add(equip);
            }
        }   
        session.flush();
        try {
            session.connection().commit();
        } catch (SQLException ex) {
            Logger.getLogger(RepositorioCliente.class.getName()).log(Level.SEVERE, null, ex);
        }
        session.close();
        return list;
    }

}
